package com.songlanyun.common.bank;

import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONObject;
import com.songlanyun.common.exception.RRException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;

@Component
@Slf4j
public class BankConfig {

    private static final String DC="DC";
    private static final String CC="CC";
    private static final Map<String, String> BANK = new HashMap<>();
    private static final Map<String, String> BANKCARDTYPE = new HashMap<>();
    private static final Set<String> DC_VALID_ARRAY = new TreeSet<>();
    private static final Set<String> CC_VALID_ARRAY = new TreeSet<>();


    /**
     * 通过银行的Mark找对名称
     *
     * @param mark
     * @return
     */
    public static String markToName(String mark) {
        if (BANK.containsKey(mark)) {
            return BANK.get(mark);
        }
        throw new RRException("您绑定的卡号有误");
    }

    public static BankCardInfo loadBankNameByCardId(String cardId) {
        String url = String.format("https://ccdcapi.alipay.com/validateAndCacheCardInfo.json?_input_charset=utf-8&cardNo=%s&cardBinCheck=true", cardId);
        String result = HttpUtil.get(url);
        JSONObject jsonObject = JSONObject.parseObject(result);
        Boolean validated = jsonObject.getBoolean("validated");
        if (!validated) {
            throw new RRException("请输入正确的银卡号");
        }
        String bankMark = jsonObject.getString("bank");
        String cardType = jsonObject.getString("cardType");
        String bankName = markToName(bankMark);
        BankCardInfo card = BankCardInfo.builder()
                .bankMark(bankMark).bankCardType(cardType).bankName(bankName).bankCardId(cardId).bankCardTypeName(loadBankCardTypeName(cardType))
                .build();
        return card;
    }

    public static void validate(BankCardInfo info)
    {
        if(DC.equals(info.getBankCardType()))
        {
            if(!DC_VALID_ARRAY.contains(info.getBankName()))
            {
                throw new RRException(String.format("%s的储蓄卡不能绑定",info.getBankName()));
            }
        }

        if(CC.equals(info.getBankCardType()))
        {
            if(!CC_VALID_ARRAY.contains(info.getBankName()))
            {
                throw new RRException(String.format("%s的信用卡不能绑定",info.getBankName()));
            }
        }
    }

    public static String loadBankCardTypeName(String cardType) {
        if (BANKCARDTYPE.containsKey(cardType)) {
            return BANKCARDTYPE.get(cardType);
        }
        throw new RRException("您绑定的卡类型有误");
    }

    public static String loadBankLogo(String bankMark) {
        String url = String.format("https://apimg.alipay.com/combo.png?d=cashier&t=%s", bankMark);
        String result = HttpUtil.get(url);
        return result;
    }


    @PostConstruct
    public void init() {
        BANK.put("BOC", "中国银行");
        BANK.put("ABC", "中国农业银行");
        BANK.put("ICBC", "中国工商银行");
        BANK.put("CCB", "中国建设银行");
        BANK.put("PSBC", "中国邮政储蓄银行");
        BANK.put("CMBC", "中国民生银行");
        BANK.put("CEB", "中国光大银行");
        BANK.put("CMB", "招商银行");
        BANK.put("COMM", "交通银行");
        BANK.put("CITIC", "中信银行");
        BANK.put("CIB", "兴业银行");
        BANK.put("SPABANK", "平安银行");
        BANK.put("HXBANK", "华夏银行");
        BANK.put("HKBEA", "东亚银行");
        BANK.put("GDB", "广发银行");
        BANK.put("EGBANK", "恒丰银行");
        BANK.put("BJBANK", "北京银行");
        BANK.put("BJRCB", "北京农商行");
        BANK.put("SHBANK", "上海银行");
        BANK.put("SHRCB", "上海农商银行");
        BANK.put("FBBANK", "富邦华一银行");
        BANK.put("SPDB", "浦发银行");
        BANK.put("JSRCU", "江苏省农村信用社联合社");
        BANK.put("JSBANK", "江苏银行");
        BANK.put("CSRCB", "常熟农商银行");
        BANK.put("CZRCB", "江南农村商业银行");
        BANK.put("JRCB", "江苏江阴农村商业银行");
        BANK.put("NJCB", "南京银行");
        BANK.put("WRCB", "无锡农村商业银行");
        BANK.put("BOSZ", "苏州银行");
        BANK.put("ZRCBANK", "张家港农村商业银行");
        BANK.put("WJRCB", "吴江农村商业银行");
        BANK.put("KSRB", "昆山农村商业银行");
        BANK.put("CJCCB", "江苏长江商业银行");
        BANK.put("TCRCB", "江苏太仓农村商业银行");
        BANK.put("DZBANK", "德州银行");
        BANK.put("ZZYH", "枣庄银行");
        BANK.put("YTBANK", "烟台银行");
        BANK.put("JNBANK", "济宁银行");
        BANK.put("DYCCB", "东营银行");
        BANK.put("BOSH", "新韩银行");
        BANK.put("WHCCB", "威海市商业银行");
        BANK.put("SDRCU", "山东省农村信用社联合社");
        BANK.put("BANKWF", "潍坊银行");
        BANK.put("LSBANK", "莱商银行");
        BANK.put("TACCB", "泰安银行");
        BANK.put("RZB", "日照银行");
        BANK.put("ZBCB", "齐商银行");
        BANK.put("QDCCB", "青岛银行");
        BANK.put("LSBC", "临商银行");
        BANK.put("HANABANK", "韩亚银行");
        BANK.put("DLB", "大连银行");
        BANK.put("DLRCB", "大连农村商业银行");
        BANK.put("HLDB", "葫芦岛银行");
        BANK.put("ASCB", "鞍山银行");
        BANK.put("BOCY", "朝阳银行");
        BANK.put("FXCB", "阜新银行");
        BANK.put("BOJZ", "锦州银行");
        BANK.put("LYCB", "辽阳银行");
        BANK.put("LNRCC", "辽宁省农村信用社");
        BANK.put("BOYK", "营口银行");
        BANK.put("YKYHCCB", "营口沿海银行");
        BANK.put("SJBANK", "盛京银行");
        BANK.put("JHBANK", "金华银行");
        BANK.put("JXBANK", "嘉兴银行");
        BANK.put("HZCB", "杭州银行");
        BANK.put("NBBANK", "宁波银行");
        BANK.put("NBCBANK", "宁波通商银行");
        BANK.put("ZJTLCB", "浙江泰隆商业银行");
        BANK.put("ZJNX", "浙江省农村信用社联合社");
        BANK.put("CZCB", "浙江稠州商业银行");
        BANK.put("MTBANK", "浙江民泰商业银行");
        BANK.put("CZBANK", "浙商银行");
        BANK.put("ANTBANK", "网商银行");
        BANK.put("WZCB", "温州银行");
        BANK.put("SXCB", "绍兴银行");
        BANK.put("HZCCB", "湖州银行");
        BANK.put("NBYZ", "宁波鄞州农商行");
        BANK.put("TZCB", "台州银行");
        BANK.put("NYBANK", "广东南粤银行");
        BANK.put("GDRCC", "广东省农村信用社联合社");
        BANK.put("GCB", "广州银行");
        BANK.put("GHB", "广东华兴银行");
        BANK.put("BOD", "东莞银行");
        BANK.put("SRCB", "深圳农村商业银行");
        BANK.put("DRCBCL", "东莞农村商业银行");
        BANK.put("RBOZ", "珠海华润银行");
        BANK.put("YZBANK", "银座村镇银行");
        BANK.put("KJCZYH", "梅县客家村镇银行");
        BANK.put("WOORI", "友利银行");
        BANK.put("SDEB", "顺德农商银行");
        BANK.put("QLBANK", "齐鲁银行");
        BANK.put("NHB", "南海农商银行");
        BANK.put("GRCB", "广州农村商业银行");
        BANK.put("SDB", "深圳发展银行");
        BANK.put("HSBK", "衡水市商业银行");
        BANK.put("BHB", "河北银行");
        BANK.put("HBRCU", "河北省农村信用社");
        BANK.put("BDCBANK", "保定银行");
        BANK.put("BOCD", "承德银行");
        BANK.put("BOCZ", "沧州银行");
        BANK.put("LANGFB", "廊坊银行");
        BANK.put("ZJKCCB", "张家口银行");
        BANK.put("XTB", "邢台银行");
        BANK.put("HDBANK", "邯郸银行");
        BANK.put("SCRCU", "四川省农村信用社联合社");
        BANK.put("CDCB", "成都银行");
        BANK.put("CDRCB", "成都农商银行");
        BANK.put("LSCCB", "乐山市商业银行");
        BANK.put("LUZBANK", "泸州市商业银行");
        BANK.put("SNCCB", "遂宁银行");
        BANK.put("CGNB", "四川天府银行");
        BANK.put("PZHCCB", "攀枝花市商业银行");
        BANK.put("ZGCCB", "自贡银行");
        BANK.put("YBCCB", "宜宾市商业银行");
        BANK.put("DYCB", "长城华西银行");
        BANK.put("MYBANK", "绵阳市商业银行");
        BANK.put("SXRCCU", "陕西省农信社");
        BANK.put("XABANK", "西安银行");
        BANK.put("HKB", "汉口银行");
        BANK.put("CABANK", "长安银行");
        BANK.put("SXRCU", "山西省农村信用社");
        BANK.put("JINCHB", "晋城银行");
        BANK.put("YDNSCZYH", "尧都农商银行村镇银行");
        BANK.put("JZBANK", "晋中银行");
        BANK.put("JSB", "晋商银行");
        BANK.put("HNRCU", "河南省农村信用社");
        BANK.put("BOP", "平顶山银行");
        BANK.put("ZYB", "中原银行");
        BANK.put("LHBANK", "漯河银行");
        BANK.put("ZZBANK", "郑州银行");
        BANK.put("BNY", "南阳市商业银行");
        BANK.put("HBC", "湖北银行");
        BANK.put("HURCB", "湖北省农信社");
        BANK.put("WHRCB", "武汉农村商业银行");
        BANK.put("BOCFCB", "中银富登村镇银行");
        BANK.put("WHBANK", "乌海银行");
        BANK.put("H3CB", "内蒙古银行");
        BANK.put("NMGNXS", "内蒙古农村信用社联合社");
        BANK.put("BSB", "包商银行");
        BANK.put("TCCB", "天津银行");
        BANK.put("TJBHB", "天津滨海农村商业银行");
        BANK.put("TRCB", "天津农商银行");
        BANK.put("BOHAIB", "渤海银行");
        BANK.put("HRXJB", "华融湘江银行");
        BANK.put("HNRCC", "湖南省农村信用社");
        BANK.put("HSCZB", "湖商村镇银行");
        BANK.put("CSCB", "长沙银行");
        BANK.put("GLBANK", "桂林银行");
        BANK.put("BGB", "广西北部湾银行");
        BANK.put("GXRCU", "广西壮族自治区农村信用社联合社");
        BANK.put("LZCCB", "柳州银行");
        BANK.put("HLJRCU", "黑龙江省农村信用社联合社");
        BANK.put("DAQINGB", "龙江银行");
        BANK.put("HRBANK", "哈尔滨银行");
        BANK.put("LYRTCZYH", "长春绿园融泰村镇银行");
        BANK.put("CCHRCZYH", "长春朝阳和润村镇银行");
        BANK.put("JKRFCZYH", "长春经开融丰村镇银行");
        BANK.put("JLRCU", "吉林省农村信用社联合社");
        BANK.put("JLBANK", "吉林银行");
        BANK.put("JXRCU", "江西省农村信用社");
        BANK.put("JJBANK", "九江银行");
        BANK.put("NCB", "江西银行");
        BANK.put("GZB", "赣州银行");
        BANK.put("SRBANK", "上饶银行");
        BANK.put("CCQTGB", "重庆三峡银行");
        BANK.put("CQBANK", "重庆银行");
        BANK.put("CRCBANK", "重庆农村商业银行");
        BANK.put("LZYH", "兰州银行");
        BANK.put("URB", "联合村镇银行");
        BANK.put("GSBANK", "甘肃银行");
        BANK.put("GSRCU", "甘肃省农村信用社");
        BANK.put("BOL", "洛阳银行");
        BANK.put("JZCBANK", "焦作中旅银行");
        BANK.put("YNRCC", "云南省农村信用社");
        BANK.put("YXCCB", "云南红塔银行");
        BANK.put("QJCCB", "曲靖市商业银行");
        BANK.put("FDB", "富滇银行");
        BANK.put("XIB", "厦门国际银行");
        BANK.put("XMBANK", "厦门银行");
        BANK.put("BOQZ", "泉州银行");
        BANK.put("FJNX", "福建省农村信用社联合社");
        BANK.put("FJHXBC", "福建海峡银行");
        BANK.put("XJRCU", "新疆农村信用社");
        BANK.put("URMQCCB", "乌鲁木齐银行");
        BANK.put("KLB", "昆仑银行");
        BANK.put("BOQH", "青海银行");
        BANK.put("QHRC", "青海省农村信用社");
        BANK.put("NXRCU", "宁夏黄河农村商业银行");
        BANK.put("SZSBK", "石嘴山银行");
        BANK.put("NXBANK", "宁夏银行");
        BANK.put("ARCU", "安徽省农村信用社");
        BANK.put("HSBANK", "徽商银行");
        BANK.put("BOHN", "海南省农村信用社");
        BANK.put("UBCHN", "海口联合农商银行");
        BANK.put("ZYCBANK", "贵州银行");
        BANK.put("GYCB", "贵阳银行");
        BANK.put("GZRCU", "贵州省农村信用社联合社");

        BANKCARDTYPE.put(DC, "借记卡");
        BANKCARDTYPE.put(CC, "信用卡");

        DC_VALID_ARRAY.add("中国工商银行");
        DC_VALID_ARRAY.add("中国农业银行");
        DC_VALID_ARRAY.add("中国银行");
        DC_VALID_ARRAY.add("中国建设银行");
        DC_VALID_ARRAY.add("交通银行");
        DC_VALID_ARRAY.add("中信银行");
        DC_VALID_ARRAY.add("中国光大银行");
        DC_VALID_ARRAY.add("华夏银行");
        DC_VALID_ARRAY.add("中国民生银行");
        DC_VALID_ARRAY.add("广发银行");
        DC_VALID_ARRAY.add("招商银行");
        DC_VALID_ARRAY.add("兴业银行");
        DC_VALID_ARRAY.add("上海浦东发展银行");
        DC_VALID_ARRAY.add("平安银行");
        DC_VALID_ARRAY.add("中国邮政储蓄银行");
        DC_VALID_ARRAY.add("莱商银行");


        DC_VALID_ARRAY.add("天津银行");
        DC_VALID_ARRAY.add("上海银行");
        DC_VALID_ARRAY.add("重庆银行");
        DC_VALID_ARRAY.add("包商银行");
        DC_VALID_ARRAY.add("盛京银行");
        DC_VALID_ARRAY.add("大连银行");
        DC_VALID_ARRAY.add("哈尔滨银行");
        DC_VALID_ARRAY.add("南京银行");
        DC_VALID_ARRAY.add("杭州银行");
        DC_VALID_ARRAY.add("宁波银行");
        DC_VALID_ARRAY.add("浙江民泰商业银行");
        DC_VALID_ARRAY.add("泉州银行");
        DC_VALID_ARRAY.add("江西银行");
        DC_VALID_ARRAY.add("齐鲁银行");
        DC_VALID_ARRAY.add("青岛银行");
        DC_VALID_ARRAY.add("临商银行");
        DC_VALID_ARRAY.add("齐商银行");
        DC_VALID_ARRAY.add("汉口银行");
        DC_VALID_ARRAY.add("广州银行");
        DC_VALID_ARRAY.add("东莞银行");
        DC_VALID_ARRAY.add("乌鲁木齐银行");
        DC_VALID_ARRAY.add("浙商银行");
        DC_VALID_ARRAY.add("渤海银行");
        DC_VALID_ARRAY.add("北京农商银行");
        DC_VALID_ARRAY.add("上海农商银行");
        DC_VALID_ARRAY.add("兰州银行");
        DC_VALID_ARRAY.add("青海银行");
        DC_VALID_ARRAY.add("甘肃银行");
        DC_VALID_ARRAY.add("贵州银行");
        DC_VALID_ARRAY.add("锦州银行");
        DC_VALID_ARRAY.add("日照银行");
        DC_VALID_ARRAY.add("河北银行");
        DC_VALID_ARRAY.add("潍坊银行");
        DC_VALID_ARRAY.add("威海市商业银行");
        DC_VALID_ARRAY.add("珠海华润银行");
        DC_VALID_ARRAY.add("贵阳银行");
        DC_VALID_ARRAY.add("宁夏银行");
        DC_VALID_ARRAY.add("无锡农商行");
        DC_VALID_ARRAY.add("广州农商银行");


        CC_VALID_ARRAY.add("中国工商银行");

        CC_VALID_ARRAY.add("中国农业银行");
        CC_VALID_ARRAY.add("中国银行");
        CC_VALID_ARRAY.add("中国建设银行");
        CC_VALID_ARRAY.add("交通银行");
        CC_VALID_ARRAY.add("中信银行");
        CC_VALID_ARRAY.add("中国光大银行");
        CC_VALID_ARRAY.add("华夏银行");
        CC_VALID_ARRAY.add("中国民生银行");
        CC_VALID_ARRAY.add("广发银行");
        CC_VALID_ARRAY.add("招商银行");
        CC_VALID_ARRAY.add("兴业银行");
        CC_VALID_ARRAY.add("上海浦东发展银行");
        CC_VALID_ARRAY.add("平安银行");


        CC_VALID_ARRAY.add("莱商银行");
        CC_VALID_ARRAY.add("北京银行");
        CC_VALID_ARRAY.add("天津银行");
        CC_VALID_ARRAY.add("上海银行");
        CC_VALID_ARRAY.add("重庆银行");
        CC_VALID_ARRAY.add("包商银行");
        CC_VALID_ARRAY.add("盛京银行");
        CC_VALID_ARRAY.add("大连银行");
        CC_VALID_ARRAY.add("哈尔滨银行");
        CC_VALID_ARRAY.add("南京银行");
        CC_VALID_ARRAY.add("杭州银行");
        CC_VALID_ARRAY.add("宁波银行");
        CC_VALID_ARRAY.add("浙江民泰商业银行");
        CC_VALID_ARRAY.add("温州银行");
        CC_VALID_ARRAY.add("泉州银行");
        CC_VALID_ARRAY.add("江西银行");
        CC_VALID_ARRAY.add("齐鲁银行");
        CC_VALID_ARRAY.add("青岛银行");
        CC_VALID_ARRAY.add("临商银行");
        CC_VALID_ARRAY.add("齐商银行");
        CC_VALID_ARRAY.add("汉口银行");
        CC_VALID_ARRAY.add("广州银行");
        CC_VALID_ARRAY.add("东莞银行");
        CC_VALID_ARRAY.add("成都银行");
        CC_VALID_ARRAY.add("富滇银行");
        CC_VALID_ARRAY.add("乌鲁木齐银行");
        CC_VALID_ARRAY.add("张家港农商银行");
        CC_VALID_ARRAY.add("恒丰银行");
        CC_VALID_ARRAY.add("浙商银行");
        CC_VALID_ARRAY.add("渤海银行");
        CC_VALID_ARRAY.add("北京农商银行");
        CC_VALID_ARRAY.add("上海农商银行");
        CC_VALID_ARRAY.add("深圳农商银行");
        CC_VALID_ARRAY.add("兰州银行");
        CC_VALID_ARRAY.add("青海银行");
        CC_VALID_ARRAY.add("长沙银行");
        CC_VALID_ARRAY.add("内蒙古银行");
        CC_VALID_ARRAY.add("张家口银行");
        CC_VALID_ARRAY.add("甘肃银行");
        CC_VALID_ARRAY.add("贵州银行");
        CC_VALID_ARRAY.add("台州银行");
        CC_VALID_ARRAY.add("甘肃农村信用社");
        CC_VALID_ARRAY.add("武汉农商银行");
        CC_VALID_ARRAY.add("晋商银行");
        CC_VALID_ARRAY.add("锦州银行");
        CC_VALID_ARRAY.add("龙江银行");
        CC_VALID_ARRAY.add("郑州银行");
        CC_VALID_ARRAY.add("日照银行");
        CC_VALID_ARRAY.add("河北银行");
        CC_VALID_ARRAY.add("潍坊银行");
        CC_VALID_ARRAY.add("威海市商业银行");
        CC_VALID_ARRAY.add("东营银行");
        CC_VALID_ARRAY.add("湖北银行");
        CC_VALID_ARRAY.add("珠海华润银行");
        CC_VALID_ARRAY.add("贵阳银行");
        CC_VALID_ARRAY.add("宁夏银行");
        CC_VALID_ARRAY.add("长安银行");
        CC_VALID_ARRAY.add("无锡农商行");
        CC_VALID_ARRAY.add("广州农商银行");
        CC_VALID_ARRAY.add("丹东银行");
        CC_VALID_ARRAY.add("福建海峡银行");
        CC_VALID_ARRAY.add("厦门银行");
        CC_VALID_ARRAY.add("九江银行");
        CC_VALID_ARRAY.add("赣州银行");


    }
}
